package main

import (
	"database/sql"
	"fmt"
	_ "github.com/go-sql-driver/mysql"
)

var db *sql.DB // 一个连接池对象

func initDB() (err error) {
	dsn := "root:123456@tcp(10.10.10.101:33306)/test_demo"
	db, err = sql.Open("mysql", dsn)
	if err != nil { // dsn格式不正确
		fmt.Printf("dsn: %s invalid, err: %v\n", dsn, err)
		return
	}
	err = db.Ping()
	if err != nil { // 连接不上数据库,说明用户名密码错误
		fmt.Printf("open %s failed, err: %v\n", dsn, err)
		return
	}
	// 设置数据库连接池最大连接数
	db.SetMaxOpenConns(10)
	return
}

type user struct {
	id   int
	name string
	age  int
}

// 预处理插入示例
func prepareInsertDemo() {
	sqlStr := "insert into user(name, age) values (?,?)"
	stmt, err := db.Prepare(sqlStr)
	if err != nil {
		fmt.Printf("prepare failed, err:%v\n", err)
		return
	}
	defer stmt.Close()

	var m = map[string]int{
		"小五": 15,
		"小六": 16,
		"小七": 17,
	}
	for k, v := range m {
		stmt.Exec(k, v)
	}
	//_, err = stmt.Exec("小王子", 18)
	//if err != nil {
	//	fmt.Printf("insert failed, err:%v\n", err)
	//	return
	//}
	//_, err = stmt.Exec("小黑", 18)
	//if err != nil {
	//	fmt.Printf("insert failed, err:%v\n", err)
	//	return
	//}
	fmt.Println("insert success.")
}

func main() {
	err := initDB()
	if err != nil {
		fmt.Printf("init DB failed, err: %v\n", err)
		return
	}
	fmt.Println("连接数据库成功")

	prepareInsertDemo()
}
